#include "dma1_usart0_tx_driver.h"

/**
 * dma 到 串口传输:
 * 使用dma1的通道7
 */
void dma1_usart0_tx_config(void)
{
    //开启dma rcu时钟
    rcu_periph_clock_enable(RCU_DMA1);
    //重置dma1的通道7
    dma_deinit(DMA1, DMA_CH7);

    //创建dma单数据发送结构体
    dma_single_data_parameter_struct init_struct;
    dma_single_data_para_struct_init(&init_struct);

    //设置dma传输方向(内存到外设)
    init_struct.direction = DMA_MEMORY_TO_PERIPH;

    //设置scr端地址,后续设置
    //init_struct.memory0_address = (uint32_t)src;
    //设置内存是否增长,因为要逐步向后取数据
    init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;

    //设置外设地址
    init_struct.periph_addr = (uint32_t)(&USART_DATA(USART0));
    //设置外设地址增长,串口地址是固定的,不增长
    init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;

    //设置数据长度,后续设置
    //init_struct.number = 0;

    //设置数据宽度:主要是外设接收端的宽度,串口是8bit
    init_struct.periph_memory_width = DMA_PERIPH_WIDTH_8BIT;

    //设置优先级
    init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;

    //基于结构体,初始化dma
    dma_single_data_mode_init(DMA1,DMA_CH7,&init_struct);

    //配置dma子链接
    //本质上就是使能
    dma_channel_subperipheral_select(DMA1,DMA_CH7,DMA_SUBPERI4);
   
}

void dma1_usart0_tx_test(void)
{
}